package com.example.client.parser;
import com.example.client.response.Response;
import com.example.entity.ProductEntity;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ExampleParser extends Parser
{
public static Response<List<ProductEntity>> parse(InputStream stream) throws IOException, JsonParseException
{
Response<List<ProductEntity>> response = null;
// init parser
JsonFactory factory = new JsonFactory();
JsonParser parser = null;
parser = factory.createJsonParser(stream);
// parse JSON
if(parser.nextToken() == JsonToken.START_OBJECT)
while(parser.nextToken() != JsonToken.END_OBJECT)
{
// error
if(parser.getCurrentName().equals("error"))
{
String type = null;
String message = null;
if(parser.nextToken() == JsonToken.START_OBJECT)
while(parser.nextToken() != JsonToken.END_OBJECT)
{
if(parser.getCurrentName().equals("type"))
{
if(parser.getCurrentToken() == JsonToken.VALUE_STRING) type = parser.getText();
}
else if(parser.getCurrentName().equals("message"))
{
if(parser.getCurrentToken() == JsonToken.VALUE_STRING) message = parser.getText();
}
}
response = new Response<>();
response.setError(true);
response.setErrorType(type);
response.setErrorMessage(message);
}
// response
else if(parser.getCurrentName().equals("product"))
{
long id = -1L;
String name = null;
if(parser.nextToken() == JsonToken.START_OBJECT)
while(parser.nextToken() != JsonToken.END_OBJECT)
{
if(parser.getCurrentName().equals("id"))
{
if(parser.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) id = parser.getLongValue();
}
else if(parser.getCurrentName().equals("name"))
{
if(parser.getCurrentToken() == JsonToken.VALUE_STRING) name = parser.getText();
}
else
{
// unknown parameter
handleUnknownParameter(parser);
}
}
ProductEntity product = new ProductEntity();
product.setId(id);
product.setName(name);
List<ProductEntity> productList = new ArrayList<>();
productList.add(product);
response = new Response<>();
response.setResponseObject(productList);
}
}
// close parser
if(parser != null) parser.close();
return response;
}
}